/**
 * @copyright Copyright (c) 2024 广州中海达卫星导航股份有限公司
 * @file cbb_camera_api.h
 * @brief 
 * @author 嵌入式软件部--黄宗强
 * @date 2024-08-22
 * @version V1.0.0
 * @details 定义摄像头库相关操作接口，实现从V4L2框架中获得视频帧，并将视频帧进行编码(H264/JPEG等)
 * @since 
 * @par 修改日志:
 * <table>
 * <tr><th>Date       <th>Version <th>Author  <th>Description
 * <tr><td>2024-08-22 <td>v1.0     <td>XXX     <td>内容
 * </table>
 */
#ifndef __CBB_CAMERA_API_H__
#define __CBB_CAMERA_API_H__

#include "cbb_camera_type.h"
#include "cbb_common.h"
#if defined (__cplusplus) || defined (c_plusplus)
extern "C" {
#endif
/**
 * @brief 打开摄像头
 * @details 
 * @param
 * @return
 * @param [in] video_node 摄像头节点，例如 /dev/diveo62
 * @return CameraHandle @retval
 */
CameraHandle CbbCameraOpen(const char *video_node);

/**
 * @brief 摄像头参数配置
 * @details 
 * @param
 * @return
 * @param [in] handle 经过CbbCameraOpen调用返回
 * @param [in] action 
 * @param [in] operate_p 
 * @return CbbCameraAckE_t @retval
 */
CbbCameraAckE_t CbbCameraCtrl(CameraHandle handle,const CbbCameraActionE_t action,CbbCameraCtrlDev_t  *operate_p);

/**
 * @brief 读取一帧数据
 * @details 
 * @param
 * @return
 * @param [in] handle 经过CbbCameraOpen调用返回
 * @param [out] frame 每次读取一帧数据
 * @param [in] timeout_ms 阻塞读取超时时间，单位毫秒
 * @return CbbCameraAckE_t @retval 成功返回CBB_CAMERA_ACK_OK
 */
CbbCameraAckE_t CbbCameraReadFrame(CameraHandle handle, CbbCameraFrame_t *frame, hd_u16_t timeout_ms);

/**
 * @brief 将帧数据重置(内部v4l2重新入队)，重置之后方可再调用CbbCameraReadFrame进行下一帧数据的读取
 * @details 
 * @param
 * @return
 * @param [in] handle 经过CbbCameraOpen调用返回
 * @param [in] frame  经过 CbbCameraReadFrame 调用获得
 * @return CbbCameraAckE_t @retval
 */
CbbCameraAckE_t CbbCameraRestFrame(CameraHandle handle, CbbCameraFrame_t frame);

/**
 * @brief 关闭摄像头
 * @details 
 * @param
 * @return
 * @param [in] handle 
 * @return CbbCameraAckE_t @retval
 */
CbbCameraAckE_t CbbCameraClose(CameraHandle handle);
/**
 * @brief 
 * @details 
 * @param
 * @return
 * @param [out] version_p  版本信息
 */
void CbbCameraVersioin(CbbVersion_t *version_p);

#if defined (__cplusplus) || defined (c_plusplus)
}
#endif

#endif // __CBB_CAMERA_API_H